﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using Website.Logger;
using DAL;
using UtilityExtensions;
using BOL;
using BOL.Ventas;
using BOL.UI;
using WebLib;
using System.Web.Script.Services;
using System.Web.Services;


namespace UILGestion.VentaAdmin.OrdenVenta
{
    public partial class OrdenVentaReadForm : System.Web.UI.Page
    {
        public OrdenVentaReadForm()
        {
            bol = new OrdenVentaBL();
            _db = new dbGestionDataContext(DbUtil.strConnString);
        }

        private OrdenVentaBL bol;
        private dbGestionDataContext _db;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                try
                {
                    
                    internalID.Value = (string)Request.QueryString["id"];
                    
                    idProyecto.Value = (string)Request.QueryString["idProyecto"];
                    paginaAnt.Value = Page.Request.UrlReferrer.AbsoluteUri;
                    menuCtrl1.loadMenuVenta(idProyecto.Value.ToInt());
                    FormatForm();

                }
                catch (SqlException sqlex)
                {
                    WebServerSideSqlError.Log(sqlex);

                    ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


                }
                catch (Exception ex)
                {
                    WebServerSideError.Log(ex);
                    ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                         "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

                }

            }
        }

        private void FormatForm()
        {

           
            
                Load();

           

            OrdenVentaRequerisitoItem1.Load(internalID.Value,idProyecto.Value.ToInt());
            OrdenVentaContratoItem1.Load(internalID.Value, idProyecto.Value.ToInt());
            OrdenVentaFormato1.Load(internalID.Value);

        }

       
        private void Load()
        {
            DAL.OrdenVenta ordenVenta= DbUtil.Db.OrdenVentas.Single(p => p.idInternal == internalID.Value.ToInt());
            
            fechaTXT.Text = ordenVenta.fecha.ToShortDateString();
            
            formatoVentaDDL.Text = ordenVenta.FormatoVenta.descripcion;
            //proformaLBL.Text =(ordenVenta.idProforma!=null)? ordenVenta.Proforma.codigo:"";
            vendedorLBL.Text = ordenVenta.Empleado.descripcion;
            bancoDDL.Text = (ordenVenta.idBanco==null?"":ordenVenta.Banco.descripcion);
             comentarioTXT.Text = ordenVenta.comentario;

             simbol1LBL.Text = ordenVenta.Moneda.simbol;
             simbol2LBL.Text = ordenVenta.Moneda.simbol;
             simbol3LBL.Text = ordenVenta.Moneda.simbol;



             
                        
             DAL.Menu menu = DbUtil.Db.Menus.Single(p => p.idInternal == 111);
            //---------------------
            string val = String.Format("{0}?Type=A&id={1}",
                                                          menu.url,
                                                          ordenVenta.idCliente);

            clienteTXT.Text = ordenVenta.Cliente.descripcion; 
            clienteTXT.NavigateUrl = "javascript:loadTabFromForm('tab{0}','{1}','{2}');".Fmt(menu.idAplicacion,
                                                                                              menu.Aplicacion.title,
                                                                                              val);
            //----------------------             
            string val1 = String.Format("{0}?Type=A&id={1}",
                                                        menu.url,
                                                        ordenVenta.idCoCliente);
            coclienteTXT.Text = (ordenVenta.idCoCliente == null) ? "" : ordenVenta.Cliente1.descripcion;
            coclienteTXT.NavigateUrl = "javascript:loadTabFromForm('tab{0}','{1}','{2}');".Fmt(menu.idAplicacion,
                                                                                              menu.Aplicacion.title,
                                                                                              val1);

            //--------------------

            montoCHBTN.Visible = ordenVenta.FormatoVenta.bitCH;
            cuentaAhorroCHK.Checked = (ordenVenta.cuentaAhorro==1)?true:false;
            
            LoadItem(ordenVenta.idInternal);
            monedaLBL.Text = ordenVenta.Moneda.descripcion;
            estadoLBL.Text = ordenVenta.EstadoItem.descripcion;
            numDocumentoTXT.Text = ordenVenta.numDocumento;

            copropietarioCHK.Checked = ordenVenta.bitCopropietario;
            idProyecto.Value = ordenVenta.idProyecto.ToString();
            {
                copropietarioPNL.Visible = true;
            }

           ;

            nuevoDocumentoVentaHLK.NavigateUrl = "~/VentaAdmin/DocumentoVenta/DocumentoVentaOPTEditForm.aspx?type=A&idOrdenVenta={0}&idProyecto={1}".Fmt(internalID.Value, idProyecto.Value);
            nuevoDocumentoVentaHLK.Text = "Nuevo Documento";

            addpagoLHK.NavigateUrl = "~/VentaAdmin/RendicionVenta/RendicionVentaOPTEditForm.aspx?idOrdenVenta={0}&idProyecto={1}".Fmt(internalID.Value, idProyecto.Value);
            addpagoLHK.Text = "Nuevo Pago";
            bancoPNL.Visible = false;

            SetEstadistica();

            if (ordenVenta.FormatoVenta.bitBanco)
            {
                bancoPNL.Visible = true;

            }

            //botones de cambio segun son Bono,CH
            montoCHBTN.Visible = false;
            montoBonoBTN.Visible = false;

            if (ordenVenta.FormatoVenta.bitCH)
            {
                montoCHBTN.Visible = true;

            }
            if (ordenVenta.FormatoVenta.bitBono)
            {
                montoBonoBTN.Visible = true;

            }
                 
            if (ordenVenta.idEstado==10)
            {
                finalizadaBTN.Visible = false;
                EditarBTN.Visible = false;
                AnularBTN.Visible = false;
                eliminarBTN.Visible = false;

                OrdenVentaRequerisitoItem1.HideEditRow();
                OrdenVentaContratoItem1.HideEditRow();
                 nuevoDocumentoVentaHLK.Text="";
                addpagoLHK.Text = "";
                cuotasAddBTN.Visible=false;
                cuotasDelBTN.Visible=false;
                montoCHBTN.Visible = false;
                montoBonoBTN.Visible = false;
                usuarioEstadoLBL.Text = "Usuario Anulacion:  "+ ordenVenta.usuarioAnula;
                fechaEstadoLBL.Text =   "Fecha Anulacion:  "+ordenVenta.fechaAnula.Value.ToShortDateString();

            }

            if (ordenVenta.idEstado == 7)
            {
                finalizadaBTN.Visible = false;
                EditarBTN.Visible = false;
                AnularBTN.Visible = true;
                eliminarBTN.Visible = false;
                usuarioEstadoLBL.Text = "Usuario Venta:  "+ ordenVenta.Empleado1.usuario;
                fechaEstadoLBL.Text =   "Fecha Venta:  "+ ordenVenta.fechaVenta.Value.ToShortDateString();
            }

            
            //----------------verificamos la existencia de documentos de venta-----------
            var documentos=DbUtil.Db.DocumentoVentas.Where(p => p.OrdenVentaItem.idOrdenVenta == internalID.Value.ToInt());
            if (documentos.Count() > 0)
            {
                if (documentos.Where(p => p.idEstado != 10).Count() > 0)
                {
                    AnularBTN.Visible = false; // solo si los documentos emitidos estas anulados
                }
                eliminarBTN.Visible = false;
                EditarBTN.Visible = false;

            }
            if (DbUtil.Db.RendicionVentaItems.Where(p => p.OrdenVentaFormato.OrdenVentaItem.idOrdenVenta == internalID.Value.ToInt()).Count() > 0)
            {
                // existe pagos
                AnularBTN.Visible = true;
                eliminarBTN.Visible = false;

                var pagos = DbUtil.Db.RendicionVentaItems.Where(p => p.OrdenVentaFormato.OrdenVentaItem.idOrdenVenta == internalID.Value.ToInt());
                if (pagos.Where(p => p.OrdenVentaFormato.idConcepto == 2).Count()>0) //bono
                {
                    montoBonoBTN.Visible = false;
                }
                if (pagos.Where(p => p.OrdenVentaFormato.idConcepto == 3).Count() > 0) //CH  
                {
                    montoCHBTN.Visible = false;
                }
//----------


                
               

            }




            

            
            

        }

        private void SetEstadistica()
        {
            decimal totalpago = DbUtil.Db.OrdenVentaFormatos.Where(p => p.OrdenVentaItem.idOrdenVenta == internalID.Value.ToInt()).Sum(y => y.totalPago);
            decimal total = DbUtil.Db.OrdenVentaFormatos.Where(p => p.OrdenVentaItem.idOrdenVenta == internalID.Value.ToInt()).Sum(y => y.total-y.totalFin);
            decimal saldo = total - totalpago;

            totalPagoLBL.Text =string.Format("{0:N}",totalpago);
                saldoLBL.Text =string.Format("{0:N}",saldo);
              totalLabel.Text =string.Format("{0:N}",total);

              if ((total - totalpago)==0)
              {
                 cuotasDelBTN.Visible=false;
                 cuotasAddBTN.Visible = false;
                 addpagoLHK.Visible = false;
              }


        }

        private void LoadItem(int idParent)
        {

            var ordenVentaItemList = bol.GetOrdenVentaItem(idParent);

            itemGridView.DataSource=ordenVentaItemList;
            itemGridView.DataBind();
                
        }
        protected void button(object sender, EventArgs e)
        {
            try
            {
                if (((Button)sender).ID == refreshBTN.ID)
                {
                    Response.Redirect("~/VentaAdmin/OrdenVenta/OrdenVentaReadForm.aspx?idProyecto={0}&id={1}".Fmt(idProyecto.Value,internalID.Value), true);                   
                }
                if (((Button)sender).ID==nuevoBTN.ID)
                {
                    Response.Redirect("~/VentaAdmin/OrdenVenta/OrdenVentaEditForm.aspx?type=A&idProyecto={0}".Fmt(idProyecto.Value),true);
                }
                if (((Button)sender).ID == EditarBTN.ID)
                {
                    Response.Redirect("~/VentaAdmin/OrdenVenta/OrdenVentaEditForm.aspx?type=E&id={0}&idProyecto={1}".Fmt(internalID.Value,idProyecto.Value), true);
                }

                if (((Button)sender).ID == eliminarBTN.ID)
                {
                    bol.DeleteOrdenVenta(internalID.Value.ToInt());
                   
                        Response.Redirect("~/VentaAdmin/OrdenVenta/OrdenVentaListForm.aspx?idProyecto={0}".Fmt(idProyecto.Value), true);
                   
                }
                if (((Button)sender).ID == ListaBTN.ID)
                {
                    Response.Redirect("~/VentaAdmin/OrdenVenta/OrdenVentaListForm.aspx?type=E&idProyecto={0}".Fmt(idProyecto.Value), true);
                }
               
                if (((Button)sender).ID == anteriorBTN.ID)
                {
                    int idAnterior=new DAL.OrdenVenta().getidAnterior(DbUtil.Db, internalID.Value.ToInt(),idEtapa.Value.ToInt()); //proyecto venta
                    Response.Redirect("~/VentaAdmin/OrdenVenta/OrdenVentaReadForm.aspx?type=E&id={0}&idProyecto={1}".Fmt(idAnterior,idProyecto.Value), true);
                }
                if (((Button)sender).ID == siguienteBTN.ID)
                {
                    int idSiguiente = new DAL.OrdenVenta().getidAnterior(DbUtil.Db, internalID.Value.ToInt(), idEtapa.Value.ToInt()); //proy
                    Response.Redirect("~/VentaAdmin/OrdenVenta/OrdenVentaReadForm.aspx?type=E&id={0}&idProyecto={1}".Fmt(idSiguiente,idProyecto.Value), true);
                }

                if (((Button)sender).ID == cuotasAddBTN.ID)
                {
                    CuotaItemGrid1.LoadSetCuota();
                    cuotaModalPPE.Show();


                }
                if (((Button)sender).ID == aceptarCuotaButton.ID)
                {
                    var origen=CuotaItemGrid1.ItemOrgien;
                    var destino=CuotaItemGrid1.ItemDestino;
                    string comentario = CuotaItemGrid1.comentario;
                    var total = origen.Sum(p => p.total);
                    int idMoneda = CuotaItemGrid1.idMoneda;
                    int idTipoUI = CuotaItemGrid1.idTipoUI;
                    int idOrdenVentaItem=CuotaItemGrid1.idOrdenVentaitem;
                    // traemos los valores a ser ingresados
                    bol.AddCuotas(internalID.Value.ToInt(),
                                   idOrdenVentaItem ,
                                   idMoneda,
                                  idTipoUI,
                                  DateTime.Now,
                                  total,
                                  comentario, 
                                  origen, 
                                  destino);

                    
                    OrdenVentaFormato1.Load(internalID.Value);
                    cuotaModalPPE.Hide();
                }

                if (((Button)sender).ID == AnularBTN.ID)
                {

                    bol.AnularVenta(_db, internalID.Value.ToInt());
                    Response.Redirect("~/VentaAdmin/OrdenVenta/OrdenVentaReadForm.aspx?id={0}&idProyecto={1}".Fmt(internalID.Value,idProyecto.Value), true);

                }

                if (((Button)sender).ID == cuotasDelBTN.ID)
                {
                    cuentaItemDeletePanel1.DataBind();
                    cuotaDelModelPPE.Show();


                }
                if (((Button)sender).ID == delCuotaButton.ID)
                {

                    var lista=cuentaItemDeletePanel1.SeleccionList;
                    foreach (var item in lista)
                    {
                        bol.DeleteCuotas(item);
                    }
                    
                    OrdenVentaFormato1.Load(internalID.Value);
                    cuotaDelModelPPE.Hide();
                }

                if (((Button)sender).ID == finalizadaBTN.ID)
                {

                    bol.finalizarVenta(internalID.Value.ToInt());
                    Response.Redirect("~/VentaAdmin/OrdenVenta/OrdenVentaReadForm.aspx?id={0}&idProyecto={1}".Fmt(internalID.Value,idProyecto.Value), true);
                }

                if (((Button)sender).ID == montoCHBTN.ID)
                {

                    undInmobiliariaDDL.DataTextField="descripcion";
                    undInmobiliariaDDL.DataValueField="idInternal";

                    var r= from a in  DbUtil.Db.OrdenVentaItems
                           where a.idOrdenVenta==internalID.Value.ToInt()
                           & a.bitFinanciado==true
                           select new {
                               idInternal=a.idUI,
                               descripcion=a.UI.Etapa.descripcion+"/"+a.UI.UILocalizacion.descripcion+"/"+a.UI.UIBloque.descripcion +"/"+ a.UI.descripcion
                           }   ;



                    undInmobiliariaDDL.DataSource=r;
                    undInmobiliariaDDL.DataBind();
                    SetActualCH();
                    NUEVOCHTXT.Text = string.Empty;
                    CreditoHipotecarioPPE.Show();
                    
                }

                if (((Button)sender).ID == montoBonoBTN.ID)
                {

                    uiBonoDDL.DataTextField = "descripcion";
                    uiBonoDDL.DataValueField = "idInternal";

                    var r = from a in DbUtil.Db.OrdenVentaItems
                            where a.idOrdenVenta == internalID.Value.ToInt()
                            & a.UI.UITipo.bitBono == true ///esto es configurado para el sistema
                            select new
                            {
                                idInternal = a.idUI,
                                descripcion = a.UI.Etapa.descripcion + "/" + a.UI.UILocalizacion.descripcion + "/" + a.UI.UIBloque.descripcion + "/" + a.UI.descripcion
                            };

                     

                    uiBonoDDL.DataSource = r;
                    uiBonoDDL.DataBind();
                    SetActualBono();
                    nuevoBonoTXT.Text = string.Empty;
                    bonoPPE.Show();

                }

                if (((Button)sender).ID == aceptarCHBTN.ID)
                {
                    
                    decimal total=NUEVOCHTXT.Text==""?0:NUEVOCHTXT.Text.ToDecimal().Value;
                    bol.SetMontoCreditoHipotecario(_db, internalID.Value.ToInt(), undInmobiliariaDDL.SelectedValue.ToInt(), total);
                    OrdenVentaFormato1.Load(internalID.Value);
                    CreditoHipotecarioPPE.Hide();
                    
                }

                if (((Button)sender).ID == aceptarBonoBTN.ID)
                {

                    decimal total = nuevoBonoTXT.Text == "" ? 0 : nuevoBonoTXT.Text.ToDecimal().Value;
                    bol.SetMontoBono(_db, internalID.Value.ToInt(), uiBonoDDL.SelectedValue.ToInt(), total);
                    OrdenVentaFormato1.Load(internalID.Value);
                    CreditoHipotecarioPPE.Hide();

                }
                
                  
                

            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);

                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
        }

            private void SetActualCH()
            {
                var creditoHipotecario = DbUtil.Db.OrdenVentaFormatos.
                            Single(p => p.idConcepto == 3 & p.OrdenVentaItem.idUI == undInmobiliariaDDL.SelectedValue.ToInt()
                                     & p.OrdenVentaItem.idOrdenVenta == internalID.Value.ToInt());
                simbolLBL.Text = creditoHipotecario.Moneda.simbol;
                actualCHLBL.Text = creditoHipotecario.Moneda.simbol + " " + creditoHipotecario.total.ToString("N");
            }
            private void SetActualBono()
            {
                var bono = DbUtil.Db.OrdenVentaFormatos.
                            Single(p => p.idConcepto == 2 & p.OrdenVentaItem.idUI == uiBonoDDL.SelectedValue.ToInt()
                                     & p.OrdenVentaItem.idOrdenVenta == internalID.Value.ToInt());
                simbolBonoLBL.Text = bono.Moneda.simbol;
                bonoLBL.Text = bono.Moneda.simbol +" "+ bono.total.ToString("N");
            }

        

            protected void undInmobiliariaDDL_SelectedIndexChanged(object sender, EventArgs e)
            {
                try
                {

                    SetActualCH();
                  }
                catch (SqlException sqlex)
                {
                    WebServerSideSqlError.Log(sqlex);

                    ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


                }
                catch (Exception ex)
                {
                    WebServerSideError.Log(ex);
                    ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                         "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

                }
            }

            protected void uiBonoDDL_SelectedIndexChanged(object sender, EventArgs e)
            {
                try
                {

                    SetActualBono();
                  }
                catch (SqlException sqlex)
                {
                    WebServerSideSqlError.Log(sqlex);

                    ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


                }
                catch (Exception ex)
                {
                    WebServerSideError.Log(ex);
                    ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                         "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

                }
            }
        
               
    }
}